package com.cqq.auth.service;

import java.util.List;

import com.cqq.auth.service.bean.LoginInfoBean;
import com.cqq.auth.service.bean.UserBean;
import com.cqq.auth.service.bean.UserDataBean;
import com.cqq.auth.service.bean.UserQueryBean;
import com.cqq.auth.service.exception.UserLoginException;
import com.cqq.auth.service.exception.UserServiceException;
import com.cqq.common.core.bean.PageInfoBean;

/**
 * <h3>用户服务接口</h3>
 * 
 * @author xijq
 * @version 1.0.0
 * 
 */
public interface UserService {

	/**
	 * <h3>添加用户信息</h3>
	 * 
	 * @param user UserBean
	 * 
	 * @return UserBean
	 */
	public UserBean addUser(UserBean user) throws UserServiceException;
	
	/**
	 * <h3>更新用户信息</h3>
	 * 
	 * @param user UserBean
	 * 
	 */
	public void updateUser(UserBean user)throws UserServiceException;
	
	/**
	 * <h3>查询用户信息</h3>
	 * 
	 * @param id 用户ID
	 * 
	 * @return UserBean
	 * 
	 */
	public UserBean findUser(Integer id);
	
	/**
	 * <h3>查询用户信息</h3>
	 * 
	 * @param username 用户名
	 * 
	 * @return UserBean
	 * 
	 */
	public UserBean findUser(String username);
	
	/**
	 * <h3>查询用户信息列表</h3>
	 * 
	 * @param ids 用户ID列表
	 * 
	 * @return UserBean List
	 * 
	 */
	public List<UserBean> listUserById(List<Integer> ids);
	
	/**
	 * <h3>查询用户信息列表</h3>
	 * 
	 * @param ids 用户ID列表
	 * 
	 * @return UserBean List
	 * 
	 */
	public List<UserBean> listUserById(Integer[] ids);
	
	/**
	 * <h3>查询用户信息列表</h3>
	 * 
	 * @param name 登录名 或者 用户真实姓名
	 * 
	 * @return UserBean List
	 * 
	 */
	public List<UserBean> listUserByName(String name);
	
	/**
	 * <h3>分页查询用户信息列表</h3>
	 * 
	 * @param queryBean UserQueryBean
	 * 
	 * @return PageInfoBean
	 * 
	 */
	public PageInfoBean<UserBean> queryUserByPage(UserQueryBean queryBean);

	/**
	 * <h3>更新用户状态</h3>
	 * 
	 * @param id 用户ID
	 * @param status 状态
	 * 
	 */
	public void updateUserStatus(Integer id, Integer status)throws UserServiceException;

	/**
	 * <h3>更新用户密码</h3>
	 * 
	 * @param id 用户ID
	 * @param oldPwd 旧密码
	 * @param newPwd 新密码
	 * 
	 */
	public void updateUserPassword(Integer id, String oldPwd, String newPwd)throws UserServiceException;

	/**
	 * <h3>重置用户密码</h3>
	 * 
	 * @param id 用户ID
	 * 
	 * @return 随机生成的密码明文
	 * 
	 */
	public String resetUserPassword(Integer id)throws UserServiceException;
	
	/**
	 * <h3>设置用户拥有的角色</h3>
	 * 
	 * @param userId 用户ID
	 * @param roleIds 角色ID数组
	 * 
	 */
	public void updateUserRoles(Integer userId, Integer[] roleIds)throws UserServiceException;
	
	/**
	 * <h3>设置用户拥有的角色</h3>
	 * 
	 * @param userId 用户ID
	 * @param orgIds 组织ID数组
	 * 
	 */
	public void updateUserOrganization(Integer userId, Integer[] orgIds)throws UserServiceException;
	
	/**
	 * <h3>用户登录</h3>
	 * 
	 * @param loginInfo LoginInfoBean
	 * 
	 * @return UserBean
	 * 
	 */
	public UserBean login(LoginInfoBean loginInfo)throws UserLoginException;
	
	/**
	 * <h3>用户登录注销</h3>
	 * 
	 */
	public void logout()throws UserServiceException;
	
	/**
	 * <h3>查询用户数据权限ID数组</h3>
	 * 
	 * @param userId 用户ID
	 * @param dataCode 数据代码
	 * 
	 * @return 数据ID数组
	 * 
	 */
	public Integer[] listUserDataId(Integer userId, String dataCode);
	
	/**
	 * <h3>查询用户信息列表</h3>
	 * 
	 * @param ids 用户ID列表
	 * 
	 * @return UserBean List
	 * 
	 */
	public List<UserBean> listUserByParentOrgId(Integer parent,String realName);
	
	
	/**
	 * <h3>查询用户信息列表</h3>
	 * 
	 * @param ids 用户ID列表
	 * 
	 * @return UserBean List
	 * 
	 */
	public List<UserBean> listUserByOrgId(Integer[] orgIds);
	
	/**
	 * 修改用户所属用户组
	 * @param userId
	 * @param roleIds
	 * @throws UserServiceException
	 */
	public void updateUserUserGroup(Integer userId, Integer[] userGroupIds) throws UserServiceException;

	/**
	 * 修改用户密码
	 * @param id
	 * @param newPwd
	 * @throws UserServiceException
	 */
	public void updatePassword(Integer id, String newPwd) throws UserServiceException;
	
	
	/**
	 * 根据状态或用户真实姓名，查询组织下用户
	 * @param parentId
	 * @param realName
	 * @param status 0停用 1启用 
	 * @return
	 */
	public List<UserBean> queryUserByParentOrgIdandStatus(Integer parentId,String realName,Integer status);
	
	
	/**
	 * 根据用户状态，查询指定组织下的用户
	 * @param orgids
	 * @param status  0停用 1启用 
	 * @return
	 */
	public List<UserBean> listUserByOrgIdAndStatus(Integer[] orgids,Integer status);
	
	
	/**
	 * 添加用户userData
	 * @param userBean
	 */
	public void addUserData(UserDataBean userDataBean);
	
	/**
	 * 删除用户配置数据
	 * @param userId
	 */
	public void deleteUserData(Integer userId);
	
}
